# 配置
git config --global user.name 'Covirtue' 
git config --global user.email '12160834+chengguoxian@user.noreply.gitee.com'

# 添加.gitignore
git config --global core.excludesfile ~/.gitignore

# 查看配置
git config -l

# 初始化仓库
cd myproject
git init

# 添加远程仓库
git remote add origin https://gitee.com/Covirtue/PPdiffusersWebUI.git

# 文件添加到git缓存区
git add .

# 删除缓存区file.txt
# git rm --cached file.txt
# 删除file.txt
# git rm file.txt

git commit -m "重新建仓"

git status

# 推送到远程仓库master分支
git push -u origin master
# git push --set-upstream origin master 
# git push -f origin master # 强制推送

# 拉取并自动合并
git pull origin master

# 然后再推送到远程仓库master分支
git push -u origin master

# 克隆仓库
git clone https://gitee.com/chengguoxian/PPdiffusersWebUI.git


##################### master分支推送到其他分支 ###############################

git checkout -b developer origin/developer
# 切换到 master 分支（如果已经在 master 上，则跳过这一步）  
git checkout master  

# 检出 master 分支上的所有文件到暂存区（这不会改变 HEAD）  
git checkout -- .  

# 切换回 developer 分支  
git checkout developer  

# 将暂存区的更改应用到 working directory（这会覆盖 developer 分支上的文件）  
git stash  
git stash pop  
  
# 或者，如果你不想使用 stash，你也可以这样做：  
# 首先，确保你的 working directory 是干净的（没有未提交的更改）  
git status # 检查状态  
git stash save # 如果需要，保存任何未提交的更改  
git checkout master -- . # 检出 master 分支上的所有文件  

# 现在，developer 分支上的文件与 master 分支上的文件相同

git add .  
git commit -m "Apply changes from master to developer"

git push -u origin developer

#####################################撤销操作#############################################
# example.txt 文件将从暂存区移除，但它的更改仍然保留在工作目录中。
git restore --staged example.txt

# 如果要完全撤销对 example.txt 的更改，可以进一步运行：
# 把 example.txt 文件恢复到上次提交的状态，丢弃所有未提交的更改
git restore example.txt

#####################################回滚操作#############################################
# 撤销最后一次提交
# 撤销最后一次提交（即，删除最近一次 commit），但保留所有更改在你的工作目录中
git reset --soft HEAD~1

# 撤销最后一次提交
# --hard 选项会丢弃未提交的更改包括工作目录
git reset --hard HEAD~1

# 撤销特定文件的更改
# 撤销暂存的更改  
git checkout -- <file>  
# 撤销工作目录中未暂存的更改  
git checkout HEAD -- <file>

# 撤销多个提交
# <commit-hash> 是你想要回滚到的提交的哈希值的前几个字符。
git reset --hard <commit-hash>

# git revert 命令与 git reset 不同，因为它会创建一个新的提交来撤销先前的提交，
# 而不是直接修改历史。这通常是一个更安全的选择，因为它不会重写已经公开的提交历史。
git revert HEAD

# 撤销合并
# 如果你合并了一个分支，但之后想要撤销这个合并，你可以使用 git revert -m 1 <merge-commit> 命令。
# 这里 <merge-commit> 是合并提交的哈希值，-m 1 指定你想要保留的父提交（通常是主分支上的提交）
git revert -m 1 <merge-commit>